const Set = require('../template')

function testSetBasic() {
  // 1. 基础单层级属性设置
  console.log(
    "1. 基础单层级属性设置:",
    (() => {
      const obj = { a: 1 }
      Set.set(obj, 'b', 2)
      return obj.b === 2 && obj.a === 1
    })()
  )

  // 2. 嵌套层级属性设置（字符串路径）
  console.log(
    "2. 嵌套层级属性设置（字符串路径）:",
    (() => {
      const obj = { a: { b: 1 } }
      Set.set(obj, 'a.c', 2)
      return obj.a.c === 2 && obj.a.b === 1
    })()
  )

  // 3. 嵌套层级属性设置（数组路径）
  console.log(
    "3. 嵌套层级属性设置（数组路径）:",
    (() => {
      const obj = { a: { b: 1 } }
      Set.set(obj, ['a', 'd'], 3)
      return obj.a.d === 3 && obj.a.b === 1
    })()
  )

  // 4. 自动创建不存在的父路径
  console.log(
    "4. 自动创建不存在的父路径:",
    (() => {
      const obj = {}
      Set.set(obj, 'x.y.z', 42)
      return obj.x.y.z === 42 && typeof obj.x === 'object' && typeof obj.x.y === 'object'
    })()
  )

  // 5. 覆盖已有属性值
  console.log(
    "5. 覆盖已有属性值:",
    (() => {
      const obj = { a: { b: 10 } }
      Set.set(obj, 'a.b', 20)
      return obj.a.b === 20
    })()
  )

  // 6. 设置null/undefined值
  console.log(
    "6. 设置null/undefined值:",
    (() => {
      const obj = { a: 1 }
      Set.set(obj, 'b', null)
      Set.set(obj, 'c', undefined)
      return obj.b === null && obj.c === undefined
    })()
  )

  // 7. 空对象基础设置
  console.log(
    "7. 空对象基础设置:",
    (() => {
      const obj = {}
      Set.set(obj, 'name', 'Alice')
      return obj.name === 'Alice'
    })()
  )

  // 8. 数组索引路径设置
  console.log(
    "8. 数组索引路径设置:",
    (() => {
      const obj = { list: [1, 2] }
      Set.set(obj, 'list[1]', 3)
      return obj.list[1] === 3 && obj.list[0] === 1
    })()
  )
}

// 执行测试
console.log("=== Set 基础测试 ===")
testSetBasic()
console.log("=== Set 基础测试完成 ===")
